#include "InformacionMateriasFactory.h"

using namespace servicios;

InformacionMateriasFactory::InformacionMateriasFactory(void)
{
};

InformacionMateria* InformacionMateriasFactory::Construir(InformacionMateriaYAML informacionMateriaYAML)
{
	InformacionMateria* informacionMateria = new InformacionMateria(informacionMateriaYAML.codigo, informacionMateriaYAML.nombre);
	informacionMateria->SetCreditos(informacionMateriaYAML.creditos);
	informacionMateria->SetCatedras(this->Construir(informacionMateriaYAML.catedras));
	return informacionMateria;
};

list<CatedraMateria*> InformacionMateriasFactory::Construir(list<CatedraMateriaYAML> catedrasYAML)
{
	list<CatedraMateria*> catedras;
	list<CatedraMateriaYAML>::iterator itCatedras;
	for(itCatedras = catedrasYAML.begin(); itCatedras != catedrasYAML.end(); itCatedras++)
	{
		CatedraMateriaYAML catedraYAML = *itCatedras;
		CatedraMateria* catedra = new CatedraMateria(catedraYAML.descripcion);
		catedra->SetDiasCursada(this->Construir(catedraYAML.diasCursada));
		catedras.push_back(catedra);
	}
	return catedras;
};

list<DiaCursadaMateria*> InformacionMateriasFactory::Construir(list<DiaCursadaYAML> diasCursadaYAML)
{
	list<DiaCursadaMateria*> diasCursada;
	list<DiaCursadaYAML>::iterator itDiasCursada;
	for(itDiasCursada = diasCursadaYAML.begin(); itDiasCursada != diasCursadaYAML.end(); itDiasCursada++)
	{
		DiaCursadaYAML diaCursadaYAML = *itDiasCursada;
		RangoHorario* rangoHorario = new RangoHorario(this->Construir(diaCursadaYAML.horaDesde), this->Construir(diaCursadaYAML.horaHasta));
		DiaCursadaMateria* diaCursada = new DiaCursadaMateria(diaCursadaYAML.diaDeLaSemana, rangoHorario);
		diasCursada.push_back(diaCursada);
	}
	return diasCursada;
};

Hora InformacionMateriasFactory::Construir(HoraYAML horaYAML)
{
	Hora hora;
	hora.horas = horaYAML.horas;
	hora.minutos = horaYAML.minutos;
	return hora;
};
